5秒でAmazon Linuxを起動するRubyスクリプト書いた
こんにちは。望月です。
急ぎでAmazon Linuxについて検証したい、そんな時にManagement Consoleからポチポチ起動していませんか?私はしていました。
ですがManagement Consoleを開く時間が惜しかったので、Amazon Linuxの起動をCLIから実行するようにしました。
実装
コードは以下の通りです。Gistにも置きました。
#!/usr/bin/env ruby # Quickly launch Amazon Linux EC2 instance in Default VPC. # Required to be set the below environment variables # - AWS_DEFAULT_REGION # - AWS_ACCESS_KEY # - AWS_SECRET_KEY # # Usage : ruby launch.rb require 'aws-sdk' # security group id to be attached to the instance secgroup_id = "sg-xxxxxxx" # KeyPair name to be used keypair_name = "keypair" ec2 = AWS::EC2.new image_id = "" AWS.memoize do image_id = ec2.images.with_owner('amazon') .filter("name", "amzn-ami-hvm-*-ebs") .sort{|a, b| b.name <=> a.name } .first.image_id end resp = ec2.instances.create(image_id: image_id, security_group_ids: [secgroup_id], key_pair: ec2.key_pairs[keypair_name], instance_type: "t2.micro", associate_public_ip_address: true) puts "Launched instance : #{resp.id}" puts "waiting for acquiring Public IP Address..." # wait until Public IP Address is assigned to the launched instance. i = 1 while ec2.instances[resp.id].ip_address.nil? if i > 10 raise RuntimeError end sleep 2 ** i i += 1 end puts "Got IP Address. You can connect via 'ssh -i ~/.ssh/#{keypair_name}.pem ec2-user@#{resp.ip_address}' in a few moments."
検証用なのでパラメータを最小限にして、必要な項目だけセットするようにしてあります。また、このスクリプトを動かすためには、以下の環境変数が適切にセットされている必要があります。
- AWS_DEFAULT_REGION : インスタンスを起動するリージョン
- AWS_ACCESS_KEY : アクセスキー
- AWS_SECRET_KEY : シークレットキー
また、インスタンスに紐付けるセキュリティグループとキーペアは事前に作成し、スクリプトの冒頭の変数部分にセキュリティグループのIDとキーペア名を記載しておいて下さい。
実装上のポイントとしては、AMI一覧から名前でEBSタイプかつHVMのAmazon Linuxを取得し、sortで最新版を取得している点です。ここの使い方は他にも活用用途ありそうですね。
実行
それでは実行してみましょう。以下のような感じで出力されるはずです。
$ ruby amazonlinux.rb Launched instance : i-xxxxxxx waiting for acquiring Public IP Address... Got IP Address. You can connect via 'ssh -i ~/.ssh/keypair.pem ec2-user@xxxxxxx' in a few moments.
簡単ですね!アレンジすれば他にもいろいろ使い道はあるので、ぜひご活用下さい。